
require("judge");
require("find");
require("pageRouter");


--全局设置
--对协作任务的处理方式  0:表示全部接受， 1:表示只接受 勾玉 或 体力， 2:表示拒绝
dealCooperateTaskType = 0;

shouldInvateFriend = false;
friendKind = 0;

--体力策略， 0：表示等待1小时  1：表示自动购买价格少于80的体力， 2：表示自动购买价格少于100的体力
dealPowerEmptyType = 0;

autoChangeFull = false; -- 自动换狗粮_set
--换狗粮方式 0：全部换  1：不换最右边 2：不换右边两个 3：只换观战
autoChangeFullType = 0;

--跟换的星级 0：两星  1：三星 2：四星 3：五星 4：六星
autoChangeStarLevel = 0;

--替换狗粮的类型	0：N	1：R	2：SR	3：SSR	4：全部
changeType = 0; 
--换狗粮最大滚动次数
scrollTimes = 1;
--滚动速度 0：稳定	1：中速	2：快速
scrollSpeed = 0;


--执行任务之前的准备工作  包括对上一个任务的结算工作
function doTaskPrepareDeal (task, lastTaskName)
  
  
  local isComplete = false;
  
  
  
  while not isComplete do
    
    --判断弹出框
    --判断是否有协作任务   如果是勾玉或体力奖励，接受
    local isCooperation, isValueType = isCooperation();
    if isCooperation then
      
      if dealCooperateTaskType == 2 then
        --拒绝协作任务
        tap(1474,896);
      elseif dealCooperateTaskType == 0 then
        --接受协作任务
        tap(1475,725);
      elseif isValueType then
        --接受协作任务
        tap(1475,725);
      else
        --拒绝协作任务
        tap(1474,896);
      end
      
      mSleep(500);
      
      isComplete = false;
      break;
    end
    
    --判断当前所在页面
    
    --如果是接受邀请任务，为了加快接受邀请速度，特殊处理
    if task.name == "空闲时接受邀请" then
      
      if isPage("探索页面") then
        local x, y = findTreasureBox();
        if x > -1 then
          tap(x, y);
          mSleep(1000);
          isComplete = false;
        else
            isComplete = true;
        end
      elseif isPage("庭院") or isPage("盯") then
        isComplete = true;
      end
      
      if isComplete then
        printLog("已经跳过了呀呀呀呀！！！！！");
      end
    end
    
    --如果是战斗页面， 检测准备  检测自动/手动
    if isPage("战斗页面") then
      
      local lines = {};
      --手动  f4eedc-444444
      lines[1] = "020040080180200C0180700F01E03F8FF1CE700E03C0F01E03C0300200000000000000000000000000000000000000000000000000000000000000000000000000000000000000100200C0180300E01C0380600C0380600C0080100000000000000000000000FFBFF3FE7E0800$手动$9.9.828$47";
      --自动	f4eedc-444444
      lines[2] = "00603C1E0F8FE1F81C03804000000080100600C01801002000000000000000000000000000000000000000000000000000000000000000000000000000000080100600C0180700E01C0300601C0300600400800000000000000000000007FFFFDFFBF0400$自动$6.9.859$45";
      
      --加载自定义字库
      local dic = createOcrDict(lines);
      local results = ocrText(dic,50,1091,167,1200, {"0xf4eedc-0x444444"}, 95,0,0);
      printLog("识别出来的文字是："..results);
      if results == "手动" then
        tap(104,1140);
        mSleep(1000);
      elseif results == "自动" then
        --集火位置处理
        
        --修改需要更换狗粮的位置为普攻
        changePositionNormalAttack(task);
        
        --判断是斗技无限退出
        if task.dealType == 1 and task.name == "自动斗技" then
          tap(64, 50);--退出
          mSleep(1000);
          
          tap(1302,729);--确认退出
          mSleep(1000);
        end
      end 
      
      isComplete = false;
      break;
    end
    
    
    --如果是更换式神页面
    if isPage("更换式神") then
      tap(64, 50);--退出
      mSleep(1000);
      
      isComplete = false;
      break;
    end
    
    --如果是准备页面
    if isPage("准备页面") then
      
      --根据任务进行判断是否需要换狗粮（进行两次检测，出战和观战）
      checkAndChangeFull(task);
      --checkAndChangeFull(task);--观战的情况以及不需要处理了
      
      --点击准备按钮
      tap(2010, 940);
      mSleep(1000);
      isComplete = false;
      break;
    end
    
    --如果是 失败鼓， 
    if isFailure() then
      
      tap(2149,1162);
      mSleep(500);
      
      --结算
      removeTask(task);
      
      isComplete = false;
      break;
      
    end
    
    --如果是其他结算页面， 点击屏幕
    if isTapToContinue() then
      
      tap(2149,1162);--点击奖励信息
      mSleep(1000);
      
      isComplete = false;
      break;
    end
    --如果是 等待开奖，连续两次点击屏幕。
    if isWaitOpenReward() then
      
      tap(1194,697);--点击等待开奖
      mSleep(2000);
      tap(2149,1162);--点击奖励信息
      mSleep(1000);
      
      isComplete = false;
      break;
    end
    
    
    --如果是胜利鼓，连续三次点击屏幕。
    if isVictory() then
      tap(800,180);
      mSleep(2000);
      tap(1194,697);--点击等待开奖
      mSleep(2000);
      tap(2149,1162);--点击奖励信息
      mSleep(1000);
      
      --结算
      removeTask(task);
      
      isComplete = false;
      break;
    end
    
    
    --如果是协战队伍页面， 邀请好友进入队伍
    if isPage("协战队伍") then
      invateFriendFight();
      
      isComplete = false;
      break;
    end
    
    
    --判断是否是提示购买体力页面
    local isBuyAlert, costStr = isBuyEnergyAlert();
    if isBuyAlert then
      
      local shouldBuy = false;
      if dealPowerEmptyType == 1 then
        if costStr == "60" then
          shouldBuy = true;
        end
      elseif dealPowerEmptyType == 2 then
        if costStr == "60" or costStr == "80" then
          shouldBuy = true;
        end
      end
      
      --处理
      if shouldBuy then
        --购买体力
        tap(1153,812);
        mSleep(1500);
        tap(2149,1162);--点击奖励信息
        mSleep(1000);
      else
        --关闭,等待1小时
        tap(1616,335);
        mSleep(1000 * 60 * 60);
      end
      
      isComplete = false;
      break;
    end
    
    --是否是获得奖励页面
    if isGetReward() then
      tap(2149,1162);--点击奖励信息
      mSleep(1000);
      isComplete = false;
      break;
    end
    
    --自动领取宝箱功能
    if task.name == "空闲时接受邀请" or task.name == "妖怪发现" or task.name == "只做封任务" then
      if isPage("探索页面") then
        local x, y = findTreasureBox();
        if x > -1 then
          tap(x, y);
          mSleep(1000);
          isComplete = false;
          break;
        end
      end
    end
    
    --断线 自动点击确认
    if isOffLine() then
      tap(1102,727);
      isComplete = false;
      break;
    end
    
    --系统提示电量不足 点击关闭
    if isPowerAlert() then
      tap(1242,802);
      
      isComplete = false;
      break;
    end
    
    --如果是探索或挑战弹出框， 点击关闭按钮
    if isExplorationAlert() then
      tap(1815,254);
      isComplete = false;
      break;
    end
    
    --如果是组队邀请弹出框， 点击取消
    if isMakeTeamAlert() then
      tap(879,995);
      isComplete = false;
      break;
    end
    
    --如果是邀请队友继续进行战斗
    if isContinueMakeTeam() then
      
      if task.name == "自动觉醒" or task.name == "八岐大蛇" then
        tap(1311,747);--确定
      else
        tap(890,745);--取消
      end
      
      isComplete = false;
      break;
    end
    
    
    --如果是攻破就进入重置确定
    if isResetRecord() then
      tap(1314,746);--确定
      --tap(903,739);--取消
      isComplete = false;
      break;
    end
    
    
    
    --登录流程相关
    --如果是登录页面
    if isLoginAlert() then
      tap(1238,593);--登录
      mSleep(2000);
      tap(1102,1019);--确定
      mSleep(2000);
      tap(1102,1019);--点击进入游戏
      mSleep(1000);
      
      isComplete = false;
      break;
    end
    
    --如果是游戏公告页面
    if isAnnouncementAlert() then
      tap(1983,134);-- 关闭游戏公告
      mSleep(1000);
      
      tap(1093,1062);--点击进入游戏
      mSleep(1000);
      
      
      isComplete = false;
      break;
    end
    
    
    --如果是进入游戏页面
    if isIntoGamePage() then
      tap(1093,1062);--确定
      mSleep(2000);
      
      tap(1093,1062);--点击屏幕进入游戏
      mSleep(1000);
      
      isComplete = false;
      break;
    end
    
    
    if isTapToIntoGame() then
      tap(1093,1062);--点击屏幕进入游戏
      mSleep(1000);
      
      isComplete = false;
      break;
    end
    
    
    if isActivityPage() then
      
      tap(2089,60);--点击关闭按钮
      mSleep(1500);
      
      tap(2128,630);--点击空白处，让庭院界面恢复正常
      mSleep(1000);
      
      isComplete = false;
      break;
      
    end
    
    if isNoticeActivityPage() then
      tap(1829,301);--关闭弹出的活动界面
      mSleep(1000);
      
      isComplete = false;
      break;
    end
    
    --判断是否有弹出框   确认或取消
    
    --判断是否是结界突破 弹出界面
    if isBreakAlert() then
      printLog("判断是否是结界突破的弹出框");
      tap(_width -5 , _height - 5);
      mSleep(1000);
      isComplete = false;
      break;
    end
    
    local x, y = findButton("取消");
    if x > -1 then
      tap(x, y);
      mSleep(1000);
      isComplete = false;
      break;
    end
    
    --解决误点击到个人信息页面时卡住的情况
    x, y = findButton("个人空间");
    if x > -1 then
      tap(2156,1195);
      mSleep(1000);
      isComplete = false;
      break;
    end
    
    printLog("结束判断弹出框");
    
    --关闭庭院换肤弹出界面
    if isChangeSkinAlert() then
      tap(1403,468);
      mSleep(1000);
      isComplete = false;
      break;
    end
    
    isComplete = true;
  end
  
  --清理上一次任务保留的界面
  if task.name ~= lastTaskName and lastTaskName ~= "" then
    cleanFormerTask(lastTaskName);
  end
end


--根据任务名称 跳转到可以执行该任务的页面
function intoSuitablePage (taskName)
  
  local isComplete = false;
  while not isComplete do
    
    if isPage("式神碎片") then
      tap(1810,283);
      mSleep(1000);
      isComplete = true;		
      break;
    end
    
    
    if taskName ~= "妖怪发现" and taskName ~= "只做封任务" and taskName ~= "空闲时接受邀请" then
      if isPage("妖怪发现副本") then
        tap(84, 110);
        mSleep(1000);
        
        tap(1341, 701);
        mSleep(1000);
        return;
      end
    end
    
    if taskName ~= "自动斗技" then
      if isPage("斗技") then
        --关闭斗技页面按钮
        tap(2034,134);
        mSleep(1000);
      end
    end
    
    
    if taskName ~= "业原火" and taskName ~= "八岐大蛇" then
      if isPage("御魂") then
        tap(1806,210);--关闭御魂界面
        mSleep(500);
      end
    end
    
    
    if taskName ~= "自动觉醒" then
      if isPage("觉醒") then
        tap(2134,273);
        mSleep(500);
      end
    end
    
    if taskName ~= "个人突破" and taskName ~= "工会突破" then
      if isPage("结界突破") then
        --点击关闭按钮
        tap(2043,116);
        mSleep(1000);		
      end
    end
    
    --接受邀请： 貌似所有的页面都可以
    if taskName == "空闲时接受邀请" then
      isComplete = true;		
      break;
      --妖怪发现: 需要跳转到探索页面才能执行任务
      
    elseif taskName == "妖怪发现" or taskName == "只做封任务" then
      if isPage("探索页面") then
        isComplete = true;
        break;
      elseif isPage("庭院") then	
        
        changePage("庭院", "探索页面");
        isComplete = false;
        break;
      elseif isPage("盯") then	
        
        changePage("盯", "庭院");
        isComplete = false;
        break;
        
      elseif isPage("结界突破") then
        --点击关闭按钮
        tap(2043,116);
        mSleep(1000);
        
        isComplete = false;
        break;
      end
      
      --个人、工会突破：结界突破页面才能执行任务
    elseif taskName == "个人突破" or taskName == "工会突破" then
      
      if isPage("结界突破") or isPage("协战队伍") then
        isComplete = true;
        break;
      elseif isPage("探索页面") then
        tap(726,1153);--点击结界突破
        mSleep(1000);
        
        isComplete = false;
        break;
      elseif isPage("庭院") then	
        
        changePage("庭院", "探索页面");
        
        isComplete = false;
        break;
        
      elseif isPage("盯") then	
        
        changePage("盯", "庭院");
        isComplete = false;
        break;
      end
      
    elseif taskName == "自动石距" or taskName == "自动年兽" or taskName == "妖气封印" then
      if isPage("组队") then
        isComplete = true;
        break;
        
      elseif isPage("庭院") or isPage("盯") then
        tap(438,1100);--点击组队
        mSleep(1000);
        isComplete = false;
        break;
        
      elseif isPage("探索页面") then
        tap(109,107);--回到庭院
        mSleep(2000);
        isComplete = false;
        break;
        
      end
      
    elseif taskName == "自动斗技" then
      if isPage("斗技") then
        isComplete = true;
        break;
        
      elseif isPage("盯") then
        tap(997,208);--进入斗技页面
        mSleep(1000);
        isComplete = false;
        break;
        
      elseif isPage("庭院") then
        changePage("庭院", "盯");
        isComplete = false;
        break;
      elseif isPage("探索页面") then
        tap(109,107);--回到庭院
        mSleep(2000);
        isComplete = false;
        break;
      end
      
    elseif taskName == "八岐大蛇" or taskName == "打业原火" then
      if isPage("御魂") then
        isComplete = true;
        break;
        
      elseif isPage("探索页面") then
        tap(348,1153);--点击御魂
        mSleep(2000);
        
        tap(361,400);
        mSleep(500);
        
        isComplete = false;
        break;
      elseif isPage("庭院") then	
        
        changePage("庭院","探索页面");
        isComplete = false;
        break;
        
      elseif isPage("盯") then	
        
        changePage("盯", "庭院");
        isComplete = false;
        break;
      end
    elseif taskName == "自动觉醒" then
      if isPage("觉醒") then
        isComplete = true;
        break;
        
      elseif isPage("探索页面") then
        tap(164,1146);--点击觉醒材料
        mSleep(2000);
        
        tap(444,517);
        mSleep(500);
        
        isComplete = false;
        break;
        
      elseif isPage("庭院") then	
        
        changePage("庭院","探索页面");
        
        isComplete = false;
        break;	
      elseif isPage("盯") then	
        
        changePage("盯", "庭院");
        isComplete = false;
        break;
        
      elseif isPage("结界突破") then
        --点击关闭按钮
        tap(2043,116);
        mSleep(1000);
        
        isComplete = false;
        break;
      end
    end
    
    isComplete = true;
  end
end

--邀请好友进入队伍 并且开始战斗
function invateFriendFight ()
  
  if not isTeamLeader() then
    return;
  end
  
  if isCanBeginFight() then
    tap(1687,1034);--开始战斗
    mSleep(1000);
  elseif shouldInvateFriend then
    --点击邀请
    tap(1104,591);
    mSleep(1000);
    
    --只选择指定好友邀请
    local tapX, tapY = findTargetFriend();
    if tapX ~= -1 then
      tap(tapX, tapY);
      mSleep(1000);
      
      --选择邀请 需要等待好友10s
      tap(1343,984);
      mSleep(10000);
      
      --查看是否可以开始战斗
      if isCanBeginFight() then
        tap(1687,1034);--开始战斗
        mSleep(1000);
      end
      
    else
      tap(862,987);--取消
      mSleep(1000);
    end
  end
end



--任务完成之后的清理工作
function cleanFormerTask (taskName) 
  printLog("清理工作,上一个任务是："..taskName);
  --等待一段时间，让动画结束
  mSleep(3000);
  
  --如果是邀请队友继续进行战斗
  if isContinueMakeTeam() then
		tap(890,745);--取消
  end
  
  if isPage("妖怪发现副本") then
    tap(84, 110);
    mSleep(1000);
    
    tap(1341, 701);
    mSleep(1000);
    return;
  end
  
  if taskName == "自动觉醒" then
    if isPage("觉醒") then
      tap(2134,273);
      mSleep(500);
    end
  elseif taskName == "业原火" or taskName == "八岐大蛇" then
    if isPage("御魂") then
      tap(1806,210);--关闭御魂界面
      mSleep(500);
    end
    
  elseif taskName == "个人突破" or taskName == "工会突破" then
    if isPage("结界突破") then
      tap(2039,120);--关闭结界突破页面
      mSleep(500);
    end
    
  elseif taskName == "自动石距" or taskName == "自动年兽" or taskName == "妖气封印" then
    if isPage("组队") then
      tap(2056,220);--关闭组队页面
      mSleep(500);
    end
  elseif taskName == "自动斗技" then
    if isPage("斗技") then
      --关闭斗技页面按钮
      tap(2034,134);
      mSleep(1000);
    end
  end
  
end
